<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>localhost_PHP</title>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
    }

    body {
        font-family: "Microsoft Yahei", Times, TimesNR, 'New Century Schoolbook', Georgia, 'New York', serif;
        font-size: 33px;
        font-weight: 900;
    }

    pre {
        font-family: "Microsoft Yahei", Times, TimesNR, 'New Century Schoolbook', Georgia, 'New York', serif;
        font-size: 33px;
        font-weight: 900;
    }

    xmp {
        font-family: "Microsoft Yahei", Times, TimesNR, 'New Century Schoolbook', Georgia, 'New York', serif;
        font-size: 33px;
        font-weight: 900;
    }

    h2 {
        text-align: center;
    }



    /*  ************************************************************************      */
    #box_1 {
        width: 500px;
        height: 250px;
        background-color: pink;

        text-align: center;
    }

    /*  ************************************************************************      */

    #box_2 {
        width: 100px;
        height: 100px;
        background-color: pink;
        margin: 0 auto;
    }
</style>

<body>
    <h1 style="text-align: center;">居中 大全</h1>
    <a style="text-align: center; display:block;" target="_blank" href="https://segmentfault.com/a/1190000013966650?utm_source=weekly&utm_medium=email&utm_campaign=email_weekly">教程来源</a>

    <hr>

    <pre>
1.1 内联元素水平居中

特点: 
        利用 text-align: center 可以实现在块级元素内部的 内联元素/块级元素 水平居中
</pre>
    <div id="box_1">
        <span>span标签</span>
        <div id="box_son">div盒子</div>
    </div>

    <hr>


    <pre>
1.2 块级元素水平居中
    通过把固定宽度块级元素的  margin: 0 auto;  就可以使块级元素水平居中
    </pre>
    <div id="box_2"></div>

    <hr>

    <pre>
1.3 多块级元素水平居中
        如果一行中有两个或两个以上的块级元素，
        通过设置块级元素的显示类型为 inline-block 
        并且 设置父容器为 text-align: center;  属性从而使多块级元素水平居中
        类似于 1.1
    </pre>

    <hr>


    <xmp>
        ***************************************************************************
        1.3.2 利用display: flex
        利用弹性布局(flex)，实现水平居中，其中justify-content
        用于设置弹性盒子元素在主轴（横轴）方向上的对齐方式，本例中设置子元素水平居中显示
        代码:
        .test{
        width: 100p%;
        height: 100p%;
        background-color: pink;
        display: flex;
        justify-content: center;
        }

        <div class="test">
            <span>span</span>
            <div>div</div>
        </div>
    </xmp>

    <hr>
    <h2>垂直居中</h2>

    <xmp>
        line-height 垂直居中法
        #v-box {
        height: 120px;
        line-height: 120px;
        background-color: pink;
        }
        <div id="v-box">123</div>
    </xmp>


    <xmp>
        ***************************************************************************
        利用表布局的vertical-align: middle可以实现子元素的垂直居中
        -------------------------------------------------------------------

        .center-table {
        display: table;
        width: 200px;
        height: 200px;
        background-color: skyblue;
        }

        .v-cell {
        display: table-cell;
        vertical-align: middle;
        }

        <div class="center-table">
            <div class="v-cell">div</div>
            <div class="v-cell">div2</div>
            <div class="v-cell">div2</div>
            <div class="v-cell">div2</div>
            <div class="v-cell">div2</div>
        </div>
    </xmp>



    <xmp>
        ***************************************************************************
        利用flex布局实现垂直居中，其中flex-direction: column定义主轴方向为纵向
        -------------------------------------------------------------------
        .center-flex {
        display: flex;
        flex-direction: column;
        justify-content: center;

        width: 150px; height: 150px; background-color: skyblue;
        }
        <div class="center-flex">
            <div>div1</div>
            <div>div1</div>
            <div>div1</div>
        </div>
    </xmp>




    <xmp>
        ***************************************************************************
        我们知道居中元素的高度和宽度，垂直居中问题就很简单。
        通过绝对定位元素距离顶部50%，并设置margin-top向上偏移元素高度的一半，
        就可以实现垂直居中了
        -------------------------------------------------------------------
        .parent {
        position: relative;
        width: 150px; height: 150px; background-color: skyblue;
        }
        .child {
        position: absolute;
        top: 50%;
        height: 100px;
        margin-top: -50px;
        background-color: pink;
        }

        <div class="parent">
            <div class="child">
                123
            </div>
        </div>
    </xmp>



    <xmp>
        ***************************************************************************
        未知高度的块级元素
        当垂直居中的元素的高度和宽度未知时，
        我们可以借助CSS3中的transform属性向Y轴反向偏移50%的方法实现垂直居中。
        -------------------------------------------------------------------
        .parent {
        position: relative;
        width: 150px; height: 150px; background-color: skyblue;
        }
        .child {
        position: absolute;
        top: 50%;
        transform: translateY(-50%);
        }

        <div class="parent">
            <div class="child">
                123
            </div>
        </div>
    </xmp>




    <xmp>
        ***************************************************************************
        3.1 固定宽高元素水平垂直居中
        -------------------------------------------------------------------
        .parent {
        position: relative;
        }
        .child {
        width: 300px;
        height: 100px;
        padding: 20px;
        position: absolute;
        top: 50%;
        left: 50%;
        margin: -70px 0 0 -170px;
        }
    </xmp>




    <xmp>
        ***************************************************************************
        3.2 未知宽高元素水平垂直居中
        利用2D变换，在水平和垂直两个方向都向反向平移宽高的一半，从而使元素水平垂直居中
        -------------------------------------------------------------------
        .parent {
        position: relative;
        width: 150px; height: 150px; background-color: skyblue;
        }
        .child {
        width: 60px;
        height: 30px;
        background-color: pink;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        }

        <div class="parent">
            <div class="child">
                child
            </div>
        </div>
    </xmp>




    <xmp>
        ***************************************************************************
        3.3 利用flex布局 左右 + 垂直居中对齐
        其中justify-content 用于设置或检索弹性盒子元素在主轴（横轴）方向上的对齐方式；
        而align-items属性定义flex子项在flex容器的当前行的侧轴（纵轴）方向上的对齐方式
        -------------------------------------------------------------------
        .parent {
        display: flex;
        justify-content: center;
        align-items: center;
        width: 150px; height: 150px; background-color: skyblue;
        }

        <div class="parent">
            <div class="child">
                child
            </div>
        </div>
    </xmp>




    <xmp>
        ***************************************************************************
        3.5 屏幕上水平垂直居中
        屏幕上水平垂直居中十分常用，常规的登录及注册页面都需要用到。
        要保证较好的兼容性，还需要用到表布局
        -------------------------------------------------------------------
        /*方法一*/
        .outer {
        display: table;
        position: absolute;
        height: 90%;
        width: 90%;
        background-color: skyblue;
        }
        .middle {
        display: table-cell;
        vertical-align: middle;
        }
        .inner {
        margin: 0 auto;
        width: 400px;
        background-color: green;
        }

        <div class="outer">
            <div class="middle">
                <div class="inner">inner</div>
            </div>
        </div>

    </xmp>




    <xmp>
        ***************************************************************************
        左右 + 垂直居中对齐
        -------------------------------------------------------------------
        /*方法二*/
        .element{
        width: 200px;
        height: 200px;
        background-color: skyblue;
        position: absolute;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        margin: auto;
        }

        <div class="element"></div>
    </xmp>




    <xmp>
        -------------------------------------------------------------------
    </xmp>




</body>
</html>